#pragma once
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include <string.h>
#define INIT_CAPACITY 4//过大小检定时如果原顺序表是空的就给个4作为基础大小，需要调整时把这里的定义改掉就好
typedef int SLDataType;//这个顺序表模块可能拿来存储各种类型的数据，也是可以随意调整的
// 动态顺序表 -- 按需申请
typedef struct SeqList
{
    SLDataType* a;
    int size;     // 有效数据个数
    int capacity; // 空间容量
}SL;

//初始化
void SLInit(SL* ps);
//销毁
//一定要记得！！！
void SLDestroy(SL* ps);
//打印
void SLPrint(SL* ps);
//扩容（其实这个扩容的函数好像不会让用户来使用，绝对是会仅仅出现在其他函数里的，这里个人认为完全可以不声明）
//这个应该可以写个进阶版，查询、返回余量并询问是否扩容的，这个应该会有用户使用的可能。或者在一次性输入多个数据时扩容到能全部装下为止
void SLCheckCapacity(SL* ps);

//头部插入
void SLPushBack(SL* ps, SLDataType x);
//头部删除
void SLPopBack(SL* ps);
//尾部插入
void SLPushFront(SL* ps, SLDataType x);
//尾部删除
void SLPopFront(SL* ps);

//指定位置之前插入数据
void SLInsert(SL* ps, int pos, SLDataType x);
//指定位置之前删除数据
void SLErase(SL* ps, int pos);
//搜索指定数据（此处是对于常规类型使用的搜索函数，如果存结构体就应该结合具体情况写对应的SLFind_by_member()函数
//比如结构体里又有名字、年龄等内容，应该分是按名字、年龄查找（对于仍在天国的排序也一样，只不过我没写）
int SLFind(SL* ps, SLDataType x);